<?php

namespace app\api\controller;

use think\Controller;
use think\facade\Request;


class Rating extends Controller
{
    protected $user_model;
    protected $record_model;

    public function __construct()
    {
        $this->user_model   = new \app\common\model\User();
        $this->record_model   = new \app\common\model\Record();
    }
    /**
     * 名字数据
     */
    public function index()
    {
        // 1. 用户认证
        $user = $this->authenticateUser();
        if (!$user) {
            return json(['code' => 401, 'msg' => '身份验证失败']);
        }
        // 姓名、年龄、性别参数获取
        $name = input('post.name');
        $age  = input('post.age');
        $sex  = input('post.sex/d');
        // 2. 参数校验
        // 姓名不能为空
        if (!$name) {
            return json(['code' => 400, 'msg' => '姓名不能为空']);
        }
        // 姓名最多四个汉字
        if (mb_strlen($name, 'utf8') > 4) {
            return json(['code' => 400, 'msg' => '姓名最多四个汉字']);
        }
        // 姓名进行正则校验
        if (!preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $name)) {
            return json(['code' => 400, 'msg' => '姓名只能是汉字']);
        }
        // 年龄不能为空
        if (!$age) {
            return json(['code' => 400, 'msg' => '年龄不能为空']);
        }
        // 年龄必须是数字
        if (!is_numeric($age)) {
            return json(['code' => 400, 'msg' => '年龄必须是数字']);
        }
        // 年龄必须在1-100之间
        if ($age < 1 || $age > 100) {
            return json(['code' => 400, 'msg' => '年龄必须在1-100之间']);
        }
        // 性别不能为空
        if (!$sex) {
            return json(['code' => 400, 'msg' => '性别不能为空']);
        }
        // 性别必须是男或女
        if ($sex != 1 && $sex != 2) {
            return json(['code' => 400, 'msg' => '性别必须是男或女']);
        }
        if($sex == 1){
            $sex = '男';
        }else{
            $sex = '女';
        }
        // 计算出生年份
        $birth_year = date('Y') - $age;
        // 构建AI指令
        $ai_instruction = <<<PROMPT
请你扮演一位资深姓名学专家，精通音律、字形、字义、中国传统文化及各时代命名趋势。请将提供的姓名、性别、出生年份作为核心分析背景，严格遵循以下框架进行系统性分析。
**【基本信息】**
*   **待分析姓名： $name
*   **性别：** $sex
*   **出生年份：** $age
**一、 核心评分维度与权重**
*   **出生年份：** $birth_year{$age}岁）
**一、 核心评分维度与权重**
请务必按照以下六个维度及权重进行加权平均计算，给出最终综合得分（满分10分）。
1.  **音律（20%）：** 发音是否响亮、悦耳？声母韵母搭配是否合理？声调（平仄）是否有节奏感？是否存在不良谐音？
2.  **字形（15%）：** 字形结构是否平衡、美观？笔画繁简是否适中？是否便于书写和辨认？
3.  **字义（25%）：** 单个字及组合后的寓意是否吉祥、积极？意境是否优美？逻辑是否通顺？
4.  **文化与气质匹配（20%）：**
    *   **文化底蕴：** 是否有经典出处（如诗词古籍）？文化内涵是否深厚？
    *   **气质匹配度：** **重点评估名字的气质（如刚毅、柔美、儒雅、中性等）与提供的【性别】是否高度契合，以及与对应年龄段的常见社会印象是否协调。**
5.  **时代适配性与独特性（20%）：** **此维度为核心优化点。**
    *   **时代适配性：** 综合分析该名字在其**出生年代**的命名潮流中是**前卫、流行、适中、略显过时还是非常复古**。
    *   **独特性：** **评估在**其同龄人群体中**的重名率与辨识度。**
**二、 输出格式与结构**
请严格按照以下JSON格式输出结果，不要包含任何其他内容：
{
  "name": "$name",
  "analysis_context": {
    "gender": "$sex",
    "birth_year": "$birth_year",
    "age": $age
  },
  "overall_score": 总分值,
  "overall_comment": "总体评语",
  "detailed_analysis": {
    "phonology": {
      "score": 分值,
      "analysis": "音律分析"
    },
    "glyph": {
      "score": 分值,
      "analysis": "字形分析"
    },
    "semantics": {
      "score": 分值,
      "analysis": "字义分析"
    },
    "cultural_fit": {
      "score": 分值,
      "analysis": "文化匹配分析"
    },
    "temporal_fit_uniqueness": {
      "score": 分值,
      "analysis": "时代适配性分析"
    }
  },
  "era_interpretation_recommendations": {
    "era_interpretation": "时代背景解读",
    "optimization_suggestions": ["建议1", "建议2"],
    "final_summary": "最终总结"
  }
}

**三、 任务流程**
1.  严格依据上述五个维度和权重，进行逐步推理和分析。
2.  最终输出必须完全遵守JSON格式。

请开始分析。
PROMPT;
        // 3. 调用DeepSeek API
        $response = $this->callDeepSeekAPI($ai_instruction);
        if (!$response['success']) {
            return json($response['response']);
        }
        $data = $response['data'];
        if (!isset($data['choices'][0]['message']['content'])) {
            return ['success' => false, 'response' => ['code' => 500, 'msg' => 'AI响应格式错误']];
        }
        $result = json_decode($data['choices'][0]['message']['content'], true);
        // 5. 数据返回
        return json(['code' => 200,'msg' => 'success','data' => $result]);
    }
    /**
     * 调用DeepSeek API
     */
    private function callDeepSeekAPI($prompt)
    {
        $api_url = 'https://api.deepseek.com/v1/chat/completions';
        $api_key = config("deepseek.api_key");

        $request_data = [
            'model' => 'deepseek-chat',
            'messages' => [['role' => 'user', 'content' => $prompt]],
            'temperature' => 0.7,
            'max_tokens' => 8192,
            'response_format' => ['type' => 'json_object']
        ];
        $ch = curl_init($api_url);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => json_encode($request_data),
            CURLOPT_HTTPHEADER => [
                'Content-Type: application/json',
                'Authorization: Bearer ' . $api_key
            ],
            CURLOPT_TIMEOUT => 0,
            CURLOPT_SSL_VERIFYPEER => true,
            CURLOPT_SSL_VERIFYHOST => 2
        ]);
        $response = curl_exec($ch);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $error = curl_error($ch);
        curl_close($ch);
        if ($response === false) {
            return [
                'success' => false, 
                'response' => ['code' => 500, 'msg' => 'AI服务请求失败: ' . $error]
            ];
        }
        if ($http_code != 200) {
            return [
                'success' => false, 
                'response' => ['code' => 500, 'msg' => 'AI服务响应异常']
            ];
        }
        return ['success' => true, 'data' => json_decode($response, true)];
    }

    /**
     * 用户认证
     */
    private function authenticateUser()
    {
        $token = request()->header("authorization");
        if (!$token) {
            return false;
        }
        return $this->user_model->getOne(['token' => $token], 'id', 'id ASC');
    }
}
